package com.evil.account.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.evil.account.mapper.UserEnterpriseMapper;
import com.evil.account.pojo.dto.user.enterprise.AddUserEnterpriseDTO;
import com.evil.account.pojo.entity.UserEnterprise;
import com.evil.common.account.dto.user.UserBaseReqDTO;
import com.evil.common.account.dto.user.UserEnterpriseDTO;

import java.util.List;
import java.util.Optional;

/**
 * 用户企业表
 *
 * @author liyang
 * @date 2022-08-08 00:00
 */
public interface UserEnterpriseService extends IService<UserEnterprise> {

    UserEnterpriseMapper getBaseMapper();

    /**
     * 是否企业管理员
     *
     * @param userEnterpriseDTO userEnterpriseDTO
     * @return boolean
     */
    boolean isEnterpriseManager(UserEnterpriseDTO userEnterpriseDTO);

    /**
     * 检查企业管理员
     *
     * @param userEnterpriseDTO userEnterpriseDTO
     */
    void checkEnterpriseManager(UserEnterpriseDTO userEnterpriseDTO);

    /**
     * 获取用户企业
     *
     * @param enterpriseId enterpriseId
     * @param userId       userId
     * @return UserEnterprise
     */
    Optional<UserEnterprise> isExistByEIdAndUId(Long enterpriseId, Long userId);

    /**
     * 获取用户企业
     *
     * @param enterpriseId enterpriseId
     * @param userId       userId
     * @return UserEnterprise
     */
    UserEnterprise findByEIdAndUId(Long enterpriseId, Long userId);

    /**
     * 获取用户的用户企业列表
     *
     * @param userId userId
     * @return UserEnterprise 列表
     */
    List<UserEnterprise> findUserEnterprises(Long userId);

    /**
     * 获取企业的用户企业列表
     *
     * @param enterpriseId enterpriseId
     * @return UserEnterprise 列表
     */
    List<UserEnterprise> findEnterpriseUsers(Long enterpriseId);

    /**
     * 新增用户企业
     *
     * @param addUserEnterpriseReqDTO addUserEnterpriseReqDTO
     */
    void addUserEnterprise(AddUserEnterpriseDTO addUserEnterpriseReqDTO);

    /**
     * 修改登录用户基础信息
     *
     * @param userBaseReqDTO userBaseReqDTO
     */
    void modifyBaseInfo(UserBaseReqDTO userBaseReqDTO);

}
